#include <assert.h>
#include <ctype.h>
#include <locale.h>
#include <errno.h>
#include <float.h>
#include <inttypes.h>
#include <limits.h>
#include <math.h>
#include <pthread.h>
#include <setjmp.h>
#include <signal.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <stdnoreturn.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include<windows.h>


/*
In general the compiler takes four steps when converting a .c file into an executable:
1. pre-processing - textually expands #include directives and #define macros in your .c file
2. compilation - converts the program into assembly (you can stop the compiler at this step by adding the -S
option)
3. assembly - converts the assembly into machine code
4. linkage - links the object code to external libraries to create an executable


*/


/*
 #define just does advanced search and replace

but the preprocessor doesn't
provide type checking for #define macros.
*/

/*
The Translation Phases

1. The source file input is mapped to the source character set (if necessary). Trigraphs are replaced in this step.
2. Continuation lines (lines that end with \) are spliced with the next line.
3. The source code is parsed into whitespace and preprocessing tokens.
4. The preprocessor is applied, which executes directives, expands macros, and applies pragmas. Each source
file pulled in by #include undergoes translation phases 1 through 4 (recursively if necessary). All
preprocessor related directives are then deleted.
5. Source character set values in character constants and string literals are mapped to the execution character
set.
6. String literals adjacent to each other are concatenated.
7. The source code is parsed into tokens, which comprise the translation unit.
8. External references are resolved, and the program image is formed.

An implementation of a C compiler may combine several steps together, but the resulting image must still behave
as if the above steps had occurred separately in the order listed above.
*/
void main(void)
{
    
    system("pause");
}